package com.baidu.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import com.baidu.constant.MessageConstant;
import com.baidu.constant.RedisMessageConstant;
import com.baidu.entity.Result;
import com.baidu.pojo.Member;
import com.baidu.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

@RestController
@RequestMapping("/member")
public class MemberController {


@Reference
private MemberService memberService;

@Autowired
private JedisPool jedisPool;

@RequestMapping("/login")
	public Result  login(@RequestBody Map map, HttpServletResponse response){
//	获得登录参数
	String telephone = (String) map.get("telephone");
	String  validateCode = (String) map.get("validateCode");

//	从redis中获得生成的验证码。
	String loginCode = jedisPool.getResource().get(telephone + RedisMessageConstant.SENDTYPE_LOGIN);

//	判断
	if (validateCode!=null&&loginCode!=null&&validateCode.equals(loginCode)){

//		登录成功，判断是否是会员，不是的自动注册
	Member member =memberService.findByTelephone(telephone);
	if (member ==null){
		member = new Member();
//		注册时间已经在sql中自动写入
		member.setPhoneNumber(telephone);
		memberService.register(member);
	}

//	向客户端写入cooking，跟踪用户
		/*
		* 目的：可以让用户下一次登录该页面的时候，
		* 不用输入密码，但要在指定的时间里。例如cooking和Redis存放时间
		* 下一次登录带着cooking的信息去redis中的数据库查询。
		 */
		Cookie cookie = new Cookie("login_telephone",telephone);
	cookie.setMaxAge(60*60*24*30);
	cookie.setPath("/");
	response.addCookie(cookie);

//		把会员信息转换为json保存会员到redis中。如果用序列化流的形式，容易损失属性
		String json = JSON.toJSON(member).toString();
		jedisPool.getResource().setex(telephone,60*60*24*30,json);

		return new Result(true, MessageConstant.LOGIN_SUCCESS);

	}else{

		return new Result(false, MessageConstant.VALIDATECODE_ERROR);
	}


}



}
